import { LoadType } from './../renderer/constants/Consts';
import Dexie, { Table } from "dexie";
import { TaskStatus, TSStatus } from "renderer/constants/Consts";



export interface IDownloadDBTask {
  id?: number
  /** 下载地址 */
  url: string
  /** 本地播放地址 */
  localUrl: string
  /** 本地存储 m3u8/ts 的目录名 需要具有唯一性 */
  name: string
  /** 课程名 */
  title: string
  /** 二级课程名 */
  sub_title: string
  /** m3u8 物理地址 */
  path: string
  /** 课程下载状态 */
  status: TaskStatus
  /** 课程id */
  course_id: number
  /** 二级课程id */
  sub_id: number
  // ts 片段数量
  tsCount: number
  // 已下载 ts 数量
  downloadCount: number
  // 课程时长
  duration: number
  // 完成时间
  completeTime: string
  // 创建世界
  createTime: string
  // 课程加载类型
  loadType: LoadType
}
export interface IDownloadDBFile {
  id?: number
  /** m3u8任务id */
  taskId: number
  /** ts 文件下载地址 */
  url: string
  /** ts 物理地址 */
  path: string
  /** ts 文件名 */
  name: string
  /** ts 时长 */
  duration: number
  /** ts 路径地址 */
  pathname: string
  /** ts 下载状态 */
  status: TSStatus
}
export interface IHistory {
  id?: number
  taskId: number
  /** 下载地址 */
  url: string
  /** 本地播放地址 */
  localUrl: string
  /** 课程名 */
  title: string
  /** 二级课程名 */
  sub_title: string
  /** m3u8 物理地址 */
  path: string
  /** 课程id */
  course_id: number
  /** 二级课程id */
  sub_id: number
  // 课程时长
  duration: number
  // 播放日期
  playDate: string
  // 当前播放时间
  playTime: number
}


class EduPlayerDB extends Dexie {
  public downloadTasks!: Table<IDownloadDBTask, number>
  public downloadFiles!: Table<IDownloadDBFile, number>
  public historyList!: Table<IHistory, number>

  public constructor() {
    super('EduPlayerDB')

    this.version(10).stores({
      downloadTasks: "++id, url, localUrl, name, title, sub_title, path, status, course_id, sub_id, tsCount, downloadCount, duration, completeTime, createTime, loadType",
      downloadFiles: "++id, taskId, url, name, path, duration, pathname, status",
      historyList: "++id, taskId, url, localUrl, title, sub_title, path, course_id, sub_id, duration, *playDate, playTime",
    })
  }
}

const DB = new EduPlayerDB()

export default DB

